#include "mainwindow.h"
#include "ui_mainwindow.h"


#include <QDragEnterEvent>
// 在 Qt6 中，需要使用 QTextDecoder 和 QTextEncoder 来代替 QTextCodec
//#include <QTextCodec>
//#include <QTextDecoder>
//#include <QTextEncoder>

//#include <TextFileFormat>

#include <QMimeData>
#include <QUrl>
#include <QFile>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setAcceptDrops(true);
    ui->textEdit->setAcceptDrops(false);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 重写拖拽进入事件
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    // 判断是否包含 url
    if(event->mimeData()->hasUrls() == true){
        // 接收事件
        event->acceptProposedAction();
    }else{
        // 放弃事件
        event->ignore();
    }
}

// 重写拖拽松开事件
void MainWindow::dropEvent(QDropEvent *event)
{
    const QMimeData* mimeData = event->mimeData();
    // 判断是否包含 url
    if(mimeData->hasUrls() == true){
        QList<QUrl> urlList = mimeData->urls();
        // 将第一个匹配为本地文件路径
        QString filename = urlList[0].toLocalFile();
        if(filename.isEmpty() == false){
            // 因为设置编码的头文件包含的有问题，所以编码就像不设置了
//            QTextCodec* codec = QTextCodec::codecForName("UTF-8");
            QFile file(filename);
            // 打开文件失败
            if(file.open(QIODevice::ReadOnly) == false){
                return;
            }
//            QTextCodec::setCodecForLocale(codec);
            // 打开成功
            QTextStream in(&file);
            // debug， 下面一行不注释的话，in.readAll() 显示的内容就输出到 console 了哦
//            qDebug() << "in readall is " << in.readAll() << Qt::endl;
            ui->textEdit->setText(in.readAll());
        }
    }else{
        event->ignore();
    }
}

